package com.sparkseries.service;

import com.sparkseries.domain.vo.SysMenuVO;
import com.sparkseries.domain.vo.SysRoleVO;
import com.sparkseries.dto.SysMenuDTO;
import com.sparkseries.common.util.domain.Result;

import java.util.List;

/**
 * 菜单管理
 */
public interface SysMenuService {
    /**
     * 创建菜单
     * @param menuDTO 菜单传输类
     * @return 默认响应类
     */
    Result<?> createMenu(SysMenuDTO menuDTO);

    /**
     * 绑定菜单角色
     * @param roleIds 角色ID集合
     * @param menuId 菜单ID
     * @return 默认响应类
     */
    Result<?> bindMenuWithRole(List<Long> roleIds, Long menuId);

    /**
     * 删除菜单
     * @param menuId 菜单传输类
     * @return 默认响应类
     */
    Result<?> deleteMenu(Long menuId);

    /**
     * 删除菜单角色绑定
     * @param roleIds 角色ID集合
     * @param menuId 菜单ID
     * @return 默认响应类
     */
    Result<?> deleteBind(List<Long> roleIds, Long menuId);

    /**
     * 修改菜单
     * @param menuDTO 菜单传输类
     * @return 默认响应类
     */
    Result<?> updateMenu(SysMenuDTO menuDTO);

    /**
     * 修改菜单状态
     * @param menuId 菜单ID
     * @param status 是否启用（0-禁用，1-启用）
     * @return 默认响应类
     */
    Result<?> updateMenuStatus(Long menuId, Integer status);

    /**
     * 获取菜单列表
     * @param menuDTO 菜单传输类
     * @return 菜单响应类集合
     */
    Result<List<SysMenuVO>> listMenu(SysMenuDTO menuDTO);

    /**
     * 获取菜单信息
     * @param menuId 菜单ID
     * @return 菜单响应类
     */
    Result<SysMenuVO> getMenuInfo(Long menuId);

    /**
     * 获取菜单下的角色
     * @param menuId 菜单ID
     * @return 角色响应类集合
     */
    Result<List<SysRoleVO>> listRoleIdsByMenuId(Long menuId);
}